package dominioEntity;

import hbt.PersistentObject;

import java.sql.Date;
import java.util.ArrayList;
import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.Entity;
import javax.persistence.JoinColumn;
import javax.persistence.ManyToOne;
import javax.persistence.OneToMany;

import org.hibernate.annotations.LazyCollection;
import org.hibernate.annotations.LazyCollectionOption;

import dominioDAO.CotizacionDAO;
import dominioTO.CotizacionTO;
import dominioTO.ItemCotizacionTO;


///Cotizacion lado Servidor DAO (Persistencia)
@Entity
public class Cotizacion extends PersistentObject{
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;
	
	private String idCotizacion; //ID proporcionado por cliente
	
	@LazyCollection(LazyCollectionOption.FALSE)
	@ManyToOne(cascade = CascadeType.ALL)
	@JoinColumn(name = "solicitud_id")
	private SolicitudRodamientos solicitudRodamientos;
	
	@LazyCollection(LazyCollectionOption.FALSE)
	@ManyToOne(cascade = CascadeType.ALL)
	@JoinColumn(name = "cliente_id")	
	private Cliente cliente;
	
	private Date fecha;
	private Integer tiempoValidez;
	private float totalConDescuento;
	private float totalSinDescuento;
	private float descuentoPorc;

	@LazyCollection(LazyCollectionOption.FALSE)
	@OneToMany(cascade=CascadeType.ALL)
	@JoinColumn(name = "cotizacion_id")
	private List<ItemCotizacion> itemsCotizacion;
	private String estado;
	
	
	public static int Tiempo = 30; //30 dias
	public static String Pendiente = "Pendiente Aceptacion";
	public static String Interna = "Cotizacion Interna";
	public static String Aceptada= "Aceptada";
	public static String AceptadaPedidoRealizado= "Aceptada Pedido CPR Realizado";
	public static String Entregado= "Entregado";
	
	
	public Cotizacion() {
		super();
		// TODO Auto-generated constructor stub
		this.tiempoValidez=Tiempo;
		estado = Pendiente;
	}	
	
	//Getters & Setters
	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}
	public Cliente getCliente()
	{
		return this.cliente;
	}
	public void setCliente(Cliente cliente)
	{
		this.cliente=cliente;
	}
	public SolicitudRodamientos getSolicitudRodamientos() {
		return solicitudRodamientos;
	}
	public void setSolicitudRodamientos(SolicitudRodamientos solicitudRodamientos) {
		this.solicitudRodamientos = solicitudRodamientos;
	}
	public Date getFecha() {
		return fecha;
	}
	public void setFecha(Date fecha) {
		this.fecha = fecha;
	}
	public int getTiempoValidez() {
		return tiempoValidez;
	}
	public void setTiempoValidez(int tiempoValidez) {
		this.tiempoValidez = tiempoValidez;
	}
	public float getTotalConDescuento() {
		return totalConDescuento;
	}
	public void setTotalConDescuento(float totalConDescuento) {
		this.totalConDescuento = totalConDescuento;
	}
	public float getTotalSinDescuento() {
		return totalSinDescuento;
	}
	public void setTotalSinDescuento(float totalSinDescuento) {
		this.totalSinDescuento = totalSinDescuento;
	}
	public float getDescuentoPorc() {
		return descuentoPorc;
	}
	public void setDescuentoPorc(float descuentoPorc) {
		this.descuentoPorc = descuentoPorc;
	}
	public List<ItemCotizacion> getItemsCotizacion() {
		return itemsCotizacion;
	}
	public void setItemsCotizacion(List<ItemCotizacion> items) {
		this.itemsCotizacion = items;
	}
	public String getEstado() {
		return estado;
	}
	public void setEstado(String estado) {
		this.estado = estado;
	}
	public String getIdCotizacion() {
		return idCotizacion;
	}
	public void setIdCotizacion(String idCotizacion) {
		this.idCotizacion = idCotizacion;
	}
	
	
	public CotizacionTO getDTO()
	{
		CotizacionTO aux = new CotizacionTO();
		aux.setId(id);
		aux.setIdCotizacion(idCotizacion);
		aux.setFecha(fecha);
		aux.setCliente(cliente.getDTO());
		aux.setTiempoValidez(tiempoValidez);
		aux.setTotalConDescuento(totalConDescuento);
		aux.setTotalSinDescuento(totalSinDescuento);
		aux.setDescuentoPorc(descuentoPorc);
		aux.setSolicitudRodamientos(solicitudRodamientos.getDTO());
		List<ItemCotizacionTO> itemsTO = new ArrayList<ItemCotizacionTO>();
		for(ItemCotizacion it : itemsCotizacion )
			{
				itemsTO.add(it.getDTO());
			}
		aux.setItems(itemsTO);
		aux.setEstado(estado);
		return aux;
	}
	
	public static Cotizacion convertirTO(CotizacionTO dto)
	{
		Cotizacion aux = new Cotizacion();
		
		aux.setIdCotizacion(dto.getIdCotizacion());
		aux.setFecha(dto.getFecha());
		aux.setCliente(Cliente.convertirToACliente(dto.getCliente()));
		aux.setTiempoValidez(dto.getTiempoValidez());
		aux.setTotalConDescuento(dto.getTotalConDescuento());
		aux.setTotalSinDescuento(dto.getTotalSinDescuento());
		aux.setDescuentoPorc(dto.getDescuentoPorc());

		return aux;
	}

	@Override
	public String toString() {
		return "Cotizacion [Id: "+this.getId() +"idCotizacion=" + idCotizacion
				+ ", solicitudRodamientos=" + solicitudRodamientos
				+ ", cliente=" + cliente + ", fecha=" + fecha
				+ ", tiempoValidez=" + tiempoValidez + ", totalConDescuento="
				+ totalConDescuento + ", totalSinDescuento="
				+ totalSinDescuento + ", descuentoPorc=" + descuentoPorc
				+ ", itemsCotizacion=" + itemsCotizacion + ", estado=" + estado
				+ "]";
	}
	
	
}
